pub fn goldbach_conjecture() -> u64 {
    let  mut prime = vec![];
    (3..).filter(|&x| {
        if is_prime(x) {
            prime.push(x);
            return false;
        }
        x&1!=0 && handle(&prime,x)
    }).take(2).sum::<u64>()
}
fn handle(prime:&[u64], n:u64) -> bool {
    let nums = prime.iter().filter(|&x| *x<n && is_square((n-x)/2)).collect::<Vec<_>>();
    nums.len()==0
}
fn is_square(num:u64) -> bool {
    let mut x = num;
    while (x * x) > num {
        x = (x + num / x)/2;
    }
    return x * x == num;
}
fn is_prime(a:u64) -> bool {
    let mut i = 2;
    while i*i <= a {
        if a % i == 0 {
            return false;
        }
        i += 1;
    }
    true
}
